package com.gzx.plugin.tjzy.core.utils;


import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;

public class ExcelUtil {
    public static void exportExcel(HttpServletResponse response, Class<?> clazz, List<?> data) {
        ExcelUtil.exportExcel(response,"1", clazz,"1", data);
    }
    /**
     * 导出数据到Excel并发送给客户端下载。
     *
     * @param response  HttpServletResponse对象，用于设置响应头和输出流。
     * @param fileName  要导出的Excel文件名（不包含扩展名）。
     * @param clazz     数据VO类的Class对象。
     * @param sheetName 工作表名称。
     * @param data      要写入Excel的数据列表。
     */
    public static void exportExcel(HttpServletResponse response, String fileName, Class<?> clazz, String sheetName, List<?> data) {
        try {
            // 设置响应的内容类型为Excel文件，并指定字符编码为UTF-8
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf-8");

            // 对文件名进行URL编码，并替换空格为"%20"
            fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");

            // 设置响应头以使浏览器能够识别为附件下载
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");

            // 使用EasyExcel写入数据到输出流，并设置工作表名称
            ExcelWriterBuilder writerBuilder = EasyExcel.write(response.getOutputStream(), clazz);
            ExcelWriterSheetBuilder sheetBuilder = writerBuilder.sheet(sheetName);

            // 添加自适应列宽处理器
//            sheetBuilder.registerWriteHandler(new AdaptiveColumnWidthStrategy());

            // 执行写操作
            sheetBuilder.doWrite(data);

        } catch (IOException e) {
            throw new RuntimeException("导出Excel失败", e);
        }
    }
}

